package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.dom.DomDate;
import br.com.telescope.adsrt.dom.DomFlag;
import br.com.telescope.adsrt.dom.DomId;
import br.com.telescope.adsrt.dom.DomInteger;
import br.com.telescope.adsrt.dom.DomOption;
import br.com.telescope.adsrt.dom.DomTextLong;
import br.com.telescope.adsrt.dom.DomUpper;
import br.com.telescope.adsrt.lib.*;
import br.com.telescope.adsrt.lib.AdsException;
import br.com.telescope.adsrt.lib.Form;
import br.com.telescope.sql.ModelQuery;
import br.com.telescope.t2.EntityBinding;
import br.com.telescope.t2.ModuleNavigator;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.exception.Severity;
import br.com.telescope.t2.feature.AbstractFeature;
import br.com.telescope.t2.feature.CustomActionFeature;
import br.com.telescope.t2.feature.DeleteFeature;
import br.com.telescope.t2.feature.InsertFeature;
import br.com.telescope.t2.feature.ListFeature;
import br.com.telescope.t2.feature.LookupFeature;
import br.com.telescope.t2.feature.QueryFeature;
import br.com.telescope.t2.feature.UpdateFeature;
import br.com.telescope.t2.feature.ViewFeature;
import br.com.telescope.util.ObjectUtil;
import solutions.ferpa.ztest.ent.*;
import solutions.ferpa.ztest.intf.*;

/**
 * Planos de ensaios.
 * <p>
 * Interface para manutenção de Plano de ensaio
 * <P>
 * Telescope origin: ZTEST.CAD_PLANO_EXECUCAO
 * <P>
 * Base entity: ZTEST.PLANO_EXECUCAO
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class CadPlanoExecucao extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "ZTEST.CAD_PLANO_EXECUCAO";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Planos de ensaios");
    }
    
    protected EntPlanoExecucao base;
    protected EntAplicativoOperacao aplc;
    protected EntPessoa rapv;
    protected EntPessoa rdsc;
    protected EntPessoa relb;
    protected EntPlanoExecucao rec; // NEED_TJW1_COMPATIBILITY
    
    // Record items
    private DomUpper aNome;
    private DomOption aSituacao;
    private DomFlag aPermiteClonar;
    private DomTextLong aDescricao;
    private DomDate aDataAprovado;
    private DomDate aDataDescontinuado;
    private DomTextLong aMotivoDescontinuarPlano;
    private DomInteger aNroPontosMetadeFaixa;
    private DomId aId;
    private DomId aResponsavelDescontinuacaoId;
    private DomId aResponsavelAprovacaoId;
    private DomId aResponsavelElaboracaoId;
    private DomId aAplicativoOperacaoId;
    private DomUpper aAplcNome;
    private DomInteger aAplcVersaoAplicativo;
    private DomUpper aRapvNomeApresentacao;
    private DomUpper aRapvCodigo;
    private DomUpper aRapvNome;
    private DomUpper aRapvSobrenome;
    private DomId aRapvUsuarioAssociadoId;
    private DomUpper aRdscNomeApresentacao;
    private DomUpper aRdscCodigo;
    private DomUpper aRdscNome;
    private DomUpper aRdscSobrenome;
    private DomId aRdscUsuarioAssociadoId;
    private DomUpper aRelbNomeApresentacao;
    private DomUpper aRelbCodigo;
    private DomUpper aRelbNome;
    private DomUpper aRelbSobrenome;
    private DomId aRelbUsuarioAssociadoId;
    
    // Query items
    private DomUpper qRapvCodigo;
    private DomUpper qRelbCodigo;
    private DomDate qDataDescontinuado;
    private DomUpper qAplcNome;
    private DomUpper qNome;
    private DomUpper qRapvSobrenome;
    private DomFlag qPermiteClonar;
    private DomDate qDataAprovado;
    private DomUpper qRapvNome;
    private DomOption qSituacao;
    private DomUpper qRelbNome;
    private DomUpper qRdscCodigo;
    private DomUpper qRelbSobrenome;
    private DomUpper qRdscSobrenome;
    private DomUpper qRdscNome;
    
    @Override
    public String getBaseSql() {
        return "select BASE.*"
                + " , APLC.NOME as APLC_NOME"
                + " , APLC.VERSAO_APLICATIVO as APLC_VERSAO_APLICATIVO"
                + " , RAPV.NOME_APRESENTACAO as RAPV_NOME_APRESENTACAO"
                + " , RAPV.CODIGO as RAPV_CODIGO"
                + " , RAPV.NOME as RAPV_NOME"
                + " , RAPV.SOBRENOME as RAPV_SOBRENOME"
                + " , RAPV.USUARIO_ASSOCIADO_ID as RAPV_USUARIO_ASSOCIADO_ID"
                + " , RDSC.NOME_APRESENTACAO as RDSC_NOME_APRESENTACAO"
                + " , RDSC.CODIGO as RDSC_CODIGO"
                + " , RDSC.NOME as RDSC_NOME"
                + " , RDSC.SOBRENOME as RDSC_SOBRENOME"
                + " , RDSC.USUARIO_ASSOCIADO_ID as RDSC_USUARIO_ASSOCIADO_ID"
                + " , RELB.NOME_APRESENTACAO as RELB_NOME_APRESENTACAO"
                + " , RELB.CODIGO as RELB_CODIGO"
                + " , RELB.NOME as RELB_NOME"
                + " , RELB.SOBRENOME as RELB_SOBRENOME"
                + " , RELB.USUARIO_ASSOCIADO_ID as RELB_USUARIO_ASSOCIADO_ID"
                + " , APLC.ID as Z_APLC_ID"
                + " , RAPV.ID as Z_RAPV_ID"
                + " , RDSC.ID as Z_RDSC_ID"
                + " , RELB.ID as Z_RELB_ID"
                + " from PLANO_EXECUCAO BASE"
                + " join APLICATIVO_OPERACAO APLC on APLC.ID = BASE.APLICATIVO_OPERACAO_ID"
                + " left join PESSOA RAPV on RAPV.ID = BASE.RESPONSAVEL_APROVACAO_ID"
                + " left join PESSOA RDSC on RDSC.ID = BASE.RESPONSAVEL_DESCONTINUACAO_ID"
                + " join PESSOA RELB on RELB.ID = BASE.RESPONSAVEL_ELABORACAO_ID";
    }
    
    @Override
    public void initAttributes() {
        
        aNome = new DomUpper();
        aNome.context(ctx).name("NOME").label("Nome do plano de execução");
        
        aSituacao = new DomOption();
        aSituacao.context(ctx).name("SITUACAO").label("Situação do plano").group(true);
        aSituacao.addOption("E", "Em elaboração");
        aSituacao.addOption("A", "Aprovado");
        aSituacao.addOption("D", "Descontinuado");
        aSituacao.setDefaultValue("E");
        
        aPermiteClonar = new DomFlag();
        aPermiteClonar.context(ctx).name("PERMITE_CLONAR").label("Permite clonar (copiado)");
        aPermiteClonar.setDefaultValue("S");
        
        aDescricao = new DomTextLong();
        aDescricao.context(ctx).name("DESCRICAO").label("Descrição do plano de execução");
        
        aDataAprovado = new DomDate();
        aDataAprovado.context(ctx).name("DATA_APROVADO").label("Data da aprovação");
        
        aDataDescontinuado = new DomDate();
        aDataDescontinuado.context(ctx).name("DATA_DESCONTINUADO").label("Data (descontinuado)");
        
        aMotivoDescontinuarPlano = new DomTextLong();
        aMotivoDescontinuarPlano.context(ctx).name("MOTIVO_DESCONTINUAR_PLANO").label("Motivo (descontinuar plano)");
        
        aNroPontosMetadeFaixa = new DomInteger();
        aNroPontosMetadeFaixa.context(ctx).name("NRO_PONTOS_METADE_FAIXA").label("Nro pontos dentro da metade da faixa");
        
        aId = new DomId();
        aId.context(ctx).name("ID").label("Id");
        
        aResponsavelDescontinuacaoId = new DomId();
        aResponsavelDescontinuacaoId.context(ctx).name("RESPONSAVEL_DESCONTINUACAO_ID").label("Responsável (descontinuação)");
        
        aResponsavelAprovacaoId = new DomId();
        aResponsavelAprovacaoId.context(ctx).name("RESPONSAVEL_APROVACAO_ID").label("Responsável (aprovação)");
        
        aResponsavelElaboracaoId = new DomId();
        aResponsavelElaboracaoId.context(ctx).name("RESPONSAVEL_ELABORACAO_ID").label("Responsável (elaboração)");
        
        aAplicativoOperacaoId = new DomId();
        aAplicativoOperacaoId.context(ctx).name("APLICATIVO_OPERACAO_ID").label("Aplicativo de operação");
        
        aAplcNome = new DomUpper();
        aAplcNome.context(ctx).name("APLC_NOME").label("Nome do aplicativo");
        aAplcNome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME as valor"
                + " , NOME as pesquisar"
                + " , NOME as descricao"
                + " from APLICATIVO_OPERACAO APLC)", "q"));
        aAplcNome.setAutocompleteLength(0);
        
        aAplcVersaoAplicativo = new DomInteger();
        aAplcVersaoAplicativo.context(ctx).name("APLC_VERSAO_APLICATIVO").label("Versão do aplicativo");
        aAplcVersaoAplicativo.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT VERSAO_APLICATIVO as valor"
                + " , VERSAO_APLICATIVO as pesquisar"
                + " , VERSAO_APLICATIVO as descricao"
                + " from APLICATIVO_OPERACAO APLC)", "q"));
        aAplcVersaoAplicativo.setAutocompleteLength(0);
        aAplcVersaoAplicativo.setDefaultValue("1");
        
        aRapvNomeApresentacao = new DomUpper();
        aRapvNomeApresentacao.context(ctx).name("RAPV_NOME_APRESENTACAO").label("Resp. (aprovação)");
        aRapvNomeApresentacao.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME_APRESENTACAO as valor"
                + " , NOME_APRESENTACAO as pesquisar"
                + " , NOME_APRESENTACAO as descricao"
                + " from PESSOA RAPV"
                + " where rapv.usuario_associado_id is not null and rapv.ativo = 'S')", "q"));
        aRapvNomeApresentacao.setAutocompleteLength(2);
        
        aRapvCodigo = new DomUpper();
        aRapvCodigo.context(ctx).name("RAPV_CODIGO").label("Cód. (pess. aprovação)");
        aRapvCodigo.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT CODIGO as valor"
                + " , CODIGO as pesquisar"
                + " , CODIGO as descricao"
                + " from PESSOA RAPV"
                + " where rapv.usuario_associado_id is not null and rapv.ativo = 'S')", "q"));
        aRapvCodigo.setAutocompleteLength(2);
        
        aRapvNome = new DomUpper();
        aRapvNome.context(ctx).name("RAPV_NOME").label("Nome (pess. aprovação)");
        aRapvNome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME as valor"
                + " , NOME as pesquisar"
                + " , NOME as descricao"
                + " from PESSOA RAPV"
                + " where rapv.usuario_associado_id is not null and rapv.ativo = 'S')", "q"));
        aRapvNome.setAutocompleteLength(2);
        
        aRapvSobrenome = new DomUpper();
        aRapvSobrenome.context(ctx).name("RAPV_SOBRENOME").label("Sobrenome (pess. aprovação)");
        aRapvSobrenome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT SOBRENOME as valor"
                + " , SOBRENOME as pesquisar"
                + " , SOBRENOME as descricao"
                + " from PESSOA RAPV"
                + " where rapv.usuario_associado_id is not null and rapv.ativo = 'S')", "q"));
        aRapvSobrenome.setAutocompleteLength(2);
        
        aRapvUsuarioAssociadoId = new DomId();
        aRapvUsuarioAssociadoId.context(ctx).name("RAPV_USUARIO_ASSOCIADO_ID").label("Usuário (aprovação)");
        aRapvUsuarioAssociadoId.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT USUARIO_ASSOCIADO_ID as valor"
                + " , USUARIO_ASSOCIADO_ID as pesquisar"
                + " , USUARIO_ASSOCIADO_ID as descricao"
                + " from PESSOA RAPV"
                + " where rapv.usuario_associado_id is not null and rapv.ativo = 'S')", "q"));
        aRapvUsuarioAssociadoId.setAutocompleteLength(2);
        
        aRdscNomeApresentacao = new DomUpper();
        aRdscNomeApresentacao.context(ctx).name("RDSC_NOME_APRESENTACAO").label("Resp. (descontinuação)");
        aRdscNomeApresentacao.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME_APRESENTACAO as valor"
                + " , NOME_APRESENTACAO as pesquisar"
                + " , NOME_APRESENTACAO as descricao"
                + " from PESSOA RDSC"
                + " where rdsc.usuario_associado_id is not null and rdsc.ativo = 'S')", "q"));
        aRdscNomeApresentacao.setAutocompleteLength(2);
        
        aRdscCodigo = new DomUpper();
        aRdscCodigo.context(ctx).name("RDSC_CODIGO").label("Cód. (pess. descontinuação)");
        aRdscCodigo.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT CODIGO as valor"
                + " , CODIGO as pesquisar"
                + " , CODIGO as descricao"
                + " from PESSOA RDSC"
                + " where rdsc.usuario_associado_id is not null and rdsc.ativo = 'S')", "q"));
        aRdscCodigo.setAutocompleteLength(2);
        
        aRdscNome = new DomUpper();
        aRdscNome.context(ctx).name("RDSC_NOME").label("Nome (pess. descontinuação)");
        aRdscNome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME as valor"
                + " , NOME as pesquisar"
                + " , NOME as descricao"
                + " from PESSOA RDSC"
                + " where rdsc.usuario_associado_id is not null and rdsc.ativo = 'S')", "q"));
        aRdscNome.setAutocompleteLength(2);
        
        aRdscSobrenome = new DomUpper();
        aRdscSobrenome.context(ctx).name("RDSC_SOBRENOME").label("Sobrenome (pess. descontinuação)");
        aRdscSobrenome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT SOBRENOME as valor"
                + " , SOBRENOME as pesquisar"
                + " , SOBRENOME as descricao"
                + " from PESSOA RDSC"
                + " where rdsc.usuario_associado_id is not null and rdsc.ativo = 'S')", "q"));
        aRdscSobrenome.setAutocompleteLength(2);
        
        aRdscUsuarioAssociadoId = new DomId();
        aRdscUsuarioAssociadoId.context(ctx).name("RDSC_USUARIO_ASSOCIADO_ID").label("Usuário (descontinuação)");
        aRdscUsuarioAssociadoId.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT USUARIO_ASSOCIADO_ID as valor"
                + " , USUARIO_ASSOCIADO_ID as pesquisar"
                + " , USUARIO_ASSOCIADO_ID as descricao"
                + " from PESSOA RDSC"
                + " where rdsc.usuario_associado_id is not null and rdsc.ativo = 'S')", "q"));
        aRdscUsuarioAssociadoId.setAutocompleteLength(2);
        
        aRelbNomeApresentacao = new DomUpper();
        aRelbNomeApresentacao.context(ctx).name("RELB_NOME_APRESENTACAO").label("Resp. elaboração");
        aRelbNomeApresentacao.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME_APRESENTACAO as valor"
                + " , NOME_APRESENTACAO as pesquisar"
                + " , NOME_APRESENTACAO as descricao"
                + " from PESSOA RELB"
                + " where relb.usuario_associado_id is not null and relb.ativo = 'S')", "q"));
        aRelbNomeApresentacao.setAutocompleteLength(2);
        
        aRelbCodigo = new DomUpper();
        aRelbCodigo.context(ctx).name("RELB_CODIGO").label("Cód. (pess. elaboração)");
        aRelbCodigo.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT CODIGO as valor"
                + " , CODIGO as pesquisar"
                + " , CODIGO as descricao"
                + " from PESSOA RELB"
                + " where relb.usuario_associado_id is not null and relb.ativo = 'S')", "q"));
        aRelbCodigo.setAutocompleteLength(2);
        
        aRelbNome = new DomUpper();
        aRelbNome.context(ctx).name("RELB_NOME").label("Nome (pess. elaboração)");
        aRelbNome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME as valor"
                + " , NOME as pesquisar"
                + " , NOME as descricao"
                + " from PESSOA RELB"
                + " where relb.usuario_associado_id is not null and relb.ativo = 'S')", "q"));
        aRelbNome.setAutocompleteLength(2);
        
        aRelbSobrenome = new DomUpper();
        aRelbSobrenome.context(ctx).name("RELB_SOBRENOME").label("Sobrenome (pess. elaboração)");
        aRelbSobrenome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT SOBRENOME as valor"
                + " , SOBRENOME as pesquisar"
                + " , SOBRENOME as descricao"
                + " from PESSOA RELB"
                + " where relb.usuario_associado_id is not null and relb.ativo = 'S')", "q"));
        aRelbSobrenome.setAutocompleteLength(2);
        
        aRelbUsuarioAssociadoId = new DomId();
        aRelbUsuarioAssociadoId.context(ctx).name("RELB_USUARIO_ASSOCIADO_ID").label("Usuário (elaboração)");
        aRelbUsuarioAssociadoId.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT USUARIO_ASSOCIADO_ID as valor"
                + " , USUARIO_ASSOCIADO_ID as pesquisar"
                + " , USUARIO_ASSOCIADO_ID as descricao"
                + " from PESSOA RELB"
                + " where relb.usuario_associado_id is not null and relb.ativo = 'S')", "q"));
        aRelbUsuarioAssociadoId.setAutocompleteLength(2);
        
        
        qRapvCodigo = new DomUpper();
        qRapvCodigo.context(ctx).name("RAPV_CODIGO").label("Cód. (pess. aprovação)");
        qRapvCodigo.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT CODIGO as valor"
                + " , CODIGO as pesquisar"
                + " , CODIGO as descricao"
                + " from PESSOA RAPV"
                + " where rapv.usuario_associado_id is not null and rapv.ativo = 'S')", "q"));
        qRapvCodigo.setAutocompleteLength(2);
        
        qRelbCodigo = new DomUpper();
        qRelbCodigo.context(ctx).name("RELB_CODIGO").label("Cód. (pess. elaboração)");
        qRelbCodigo.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT CODIGO as valor"
                + " , CODIGO as pesquisar"
                + " , CODIGO as descricao"
                + " from PESSOA RELB"
                + " where relb.usuario_associado_id is not null and relb.ativo = 'S')", "q"));
        qRelbCodigo.setAutocompleteLength(2);
        
        qDataDescontinuado = new DomDate();
        qDataDescontinuado.context(ctx).name("DATA_DESCONTINUADO").label("Data (descontinuado)");
        
        qAplcNome = new DomUpper();
        qAplcNome.context(ctx).name("APLC_NOME").label("Nome do aplicativo");
        qAplcNome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME as valor"
                + " , NOME as pesquisar"
                + " , NOME as descricao"
                + " from APLICATIVO_OPERACAO APLC)", "q"));
        qAplcNome.setAutocompleteLength(0);
        
        qNome = new DomUpper();
        qNome.context(ctx).name("NOME").label("Nome do plano de execução");
        
        qRapvSobrenome = new DomUpper();
        qRapvSobrenome.context(ctx).name("RAPV_SOBRENOME").label("Sobrenome (pess. aprovação)");
        qRapvSobrenome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT SOBRENOME as valor"
                + " , SOBRENOME as pesquisar"
                + " , SOBRENOME as descricao"
                + " from PESSOA RAPV"
                + " where rapv.usuario_associado_id is not null and rapv.ativo = 'S')", "q"));
        qRapvSobrenome.setAutocompleteLength(2);
        
        qPermiteClonar = new DomFlag();
        qPermiteClonar.context(ctx).name("PERMITE_CLONAR").label("Permite clonar (copiado)");
        
        qDataAprovado = new DomDate();
        qDataAprovado.context(ctx).name("DATA_APROVADO").label("Data da aprovação");
        
        qRapvNome = new DomUpper();
        qRapvNome.context(ctx).name("RAPV_NOME").label("Nome (pess. aprovação)");
        qRapvNome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME as valor"
                + " , NOME as pesquisar"
                + " , NOME as descricao"
                + " from PESSOA RAPV"
                + " where rapv.usuario_associado_id is not null and rapv.ativo = 'S')", "q"));
        qRapvNome.setAutocompleteLength(2);
        
        qSituacao = new DomOption();
        qSituacao.context(ctx).name("SITUACAO").label("Situação do plano");
        qSituacao.addOption("E", "Em elaboração");
        qSituacao.addOption("A", "Aprovado");
        qSituacao.addOption("D", "Descontinuado");
        
        qRelbNome = new DomUpper();
        qRelbNome.context(ctx).name("RELB_NOME").label("Nome (pess. elaboração)");
        qRelbNome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME as valor"
                + " , NOME as pesquisar"
                + " , NOME as descricao"
                + " from PESSOA RELB"
                + " where relb.usuario_associado_id is not null and relb.ativo = 'S')", "q"));
        qRelbNome.setAutocompleteLength(2);
        
        qRdscCodigo = new DomUpper();
        qRdscCodigo.context(ctx).name("RDSC_CODIGO").label("Cód. (pess. descontinuação)");
        qRdscCodigo.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT CODIGO as valor"
                + " , CODIGO as pesquisar"
                + " , CODIGO as descricao"
                + " from PESSOA RDSC"
                + " where rdsc.usuario_associado_id is not null and rdsc.ativo = 'S')", "q"));
        qRdscCodigo.setAutocompleteLength(2);
        
        qRelbSobrenome = new DomUpper();
        qRelbSobrenome.context(ctx).name("RELB_SOBRENOME").label("Sobrenome (pess. elaboração)");
        qRelbSobrenome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT SOBRENOME as valor"
                + " , SOBRENOME as pesquisar"
                + " , SOBRENOME as descricao"
                + " from PESSOA RELB"
                + " where relb.usuario_associado_id is not null and relb.ativo = 'S')", "q"));
        qRelbSobrenome.setAutocompleteLength(2);
        
        qRdscSobrenome = new DomUpper();
        qRdscSobrenome.context(ctx).name("RDSC_SOBRENOME").label("Sobrenome (pess. descontinuação)");
        qRdscSobrenome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT SOBRENOME as valor"
                + " , SOBRENOME as pesquisar"
                + " , SOBRENOME as descricao"
                + " from PESSOA RDSC"
                + " where rdsc.usuario_associado_id is not null and rdsc.ativo = 'S')", "q"));
        qRdscSobrenome.setAutocompleteLength(2);
        
        qRdscNome = new DomUpper();
        qRdscNome.context(ctx).name("RDSC_NOME").label("Nome (pess. descontinuação)");
        qRdscNome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME as valor"
                + " , NOME as pesquisar"
                + " , NOME as descricao"
                + " from PESSOA RDSC"
                + " where rdsc.usuario_associado_id is not null and rdsc.ativo = 'S')", "q"));
        qRdscNome.setAutocompleteLength(2);
    }
    
    @Override
    public void initEntityBindings() {
        EntityBinding binding;
        
        binding = new EntityBinding("ZTEST.APLICATIVO_OPERACAO", "APLC", "Z_APLC_ID", "ZTEST.CAD_APLICATIVO_OPERACAO.VIEW");
        binding.addFields(aAplcNome, aAplcVersaoAplicativo);
        entityBindings.add(binding);
    }
    
    @Override
    public String getQueryPkColumn() {
        return "BASE.ID";
    }
    
    @Override
    public void setId(String value) {
        this.aId.setValue(value);
    }
    
    @Override
    public EntPlanoExecucao getRecord() {
        if (base == null) {
            base = new EntPlanoExecucao(ctx);
            rec = base;
        }
        return this.base;
    }
    
    @Override
    public String getContextName() {
        return aNome.toText();
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "NOME, SITUACAO, APLC_NOME, APLC_VERSAO_APLICATIVO";
    }
    
    @Override
    public void translateInsertFks(Form form) {
        ModelQuery query;
        
        // APLICATIVO_OPERACAO_ID
        try {
            if (form.hasFields("APLC_NOME")) {
                query = createQuery()
                        .select("APLC.ID")
                        .from("APLICATIVO_OPERACAO", "APLC")
                        .filter("APLC.NOME", form.get("APLC_NOME"))
                        ;
                base.setAplicativoOperacaoId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
        
        // RESPONSAVEL_ELABORACAO_ID
        try {
            if (form.hasFields("RELB_NOME_APRESENTACAO")) {
                query = createQuery()
                        .select("RELB.ID")
                        .from("PESSOA", "RELB")
                        .where("relb.usuario_associado_id is not null and relb.ativo = 'S'")
                        .filter("RELB.NOME_APRESENTACAO", form.get("RELB_NOME_APRESENTACAO"))
                        ;
                base.setResponsavelElaboracaoId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
    }
    
    @Override
    public void translateUpdateFks(Form form) {
        ModelQuery query;
        
        // APLICATIVO_OPERACAO_ID
        try {
            if (form.hasFields("APLC_NOME")) {
                query = createQuery()
                        .select("APLC.ID")
                        .from("APLICATIVO_OPERACAO", "APLC")
                        .filter("APLC.NOME", form.get("APLC_NOME"))
                        ;
                base.setAplicativoOperacaoId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
    }
    
    @Override
    public ModuleNavigator getDefaultModuleNavigator() {
        return new ModPlaens();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="QUERY">
    public class FQuery extends QueryFeature {
        
        @Override
        public void initForm() {
            addField(qNome, "opt");
            addField(qSituacao, "opt");
            addField(qAplcNome, "opt");
            addField(qPermiteClonar, "opt");
            addField(qRelbCodigo, "opt");
            addField(qRelbNome, "opt");
            addField(qRelbSobrenome, "opt");
            addField(qDataAprovado, "opt");
            addField(qRapvCodigo, "opt");
            addField(qRapvNome, "opt");
            addField(qRapvSobrenome, "opt");
            addField(qDataDescontinuado, "opt");
            addField(qRdscCodigo, "opt");
            addField(qRdscNome, "opt");
            addField(qRdscSobrenome, "opt");
        }
        
        {
            setFeatureName("QUERY");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="LIST">
    public class FList extends ListFeature {
        
        @Override
        public void initForm() {
            addField(aNome, "view");
            addField(aSituacao, "view");
            addField(aAplcNome, "view");
            addField(aAplcVersaoAplicativo, "view");
            addField(aPermiteClonar, "view");
            addField(aDescricao, "view");
            addField(aRelbCodigo, "view");
            addField(aDataAprovado, "view");
            addField(aRapvCodigo, "view");
            addField(aDataDescontinuado, "view");
            addField(aRdscCodigo, "view");
        }
        
        {
            setFeatureName("LIST");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="VIEW">
    public class FView extends ViewFeature {
        
        @Override
        public void initForm() {
            addField(aNome, "view");
            addField(aSituacao, "view");
            addField(aAplcNome, "view");
            addField(aAplcVersaoAplicativo, "view");
            addField(aPermiteClonar, "view");
            addField(aDescricao, "view");
            addField(aRelbCodigo, "view");
            addField(aDataAprovado, "view");
            addField(aRapvNomeApresentacao, "view");
            addField(aRapvCodigo, "view");
            addField(aDataDescontinuado, "view");
            addField(aRdscNomeApresentacao, "view");
            addField(aRdscCodigo, "view");
            addField(aRdscNome, "view");
            addField(aRdscSobrenome, "view");
            addField(aNroPontosMetadeFaixa, "view");
        }
        
        @Override
        public void posDisplay() {
            {
                CadValorVariavelEnsaio external = new CadValorVariavelEnsaio();
                external.setRuntime(ctx.clone());
                external.init();
                AbstractFeature feature = external.getFeature("LIST");
                external.setDetail(true);
                feature.run();
            }
        }
        
        @Override
        public void preDisplay() {
            try {
                desabilitarAcoesInterface();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        @Override
        public void onAction() {
            addSubmit(getFeature("APROVAR_PLANO")).label("Aprovar plano");
            addSubmit(getFeature("DESCONTINUAR_PLANO")).label("Descontinuar plano");
            addSubmit(getFeature("CLONAR_PLANO")).label("Clonar plano");
        }
        
        {
            setFeatureName("VIEW");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="INSERT">
    public class FInsert extends InsertFeature {
        
        @Override
        public void initForm() {
            aNome.setOptional(false);
            addField(aNome, "rqd");
            aAplcNome.setOptional(false);
            addField(aAplcNome, "rqd");
            aAplcVersaoAplicativo.setEditable(false);
            addField(aAplcVersaoAplicativo, "view");
            aPermiteClonar.setOptional(false);
            addField(aPermiteClonar, "rqd");
            addField(aDescricao, "opt");
            aRelbNomeApresentacao.setOptional(false);
            addField(aRelbNomeApresentacao, "rqd");
            aRelbCodigo.setEditable(false);
            addField(aRelbCodigo, "view");
            aNroPontosMetadeFaixa.setOptional(false);
            addField(aNroPontosMetadeFaixa, "rqd");
        }
        
        {
            setFeatureName("INSERT");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="UPDATE">
    public class FUpdate extends UpdateFeature {
        
        @Override
        public void initForm() {
            aNome.setOptional(false);
            addField(aNome, "rqd");
            aSituacao.setEditable(false);
            addField(aSituacao, "view");
            aAplcNome.setOptional(false);
            addField(aAplcNome, "rqd");
            aAplcVersaoAplicativo.setEditable(false);
            addField(aAplcVersaoAplicativo, "view");
            aPermiteClonar.setOptional(false);
            addField(aPermiteClonar, "rqd");
            addField(aDescricao, "opt");
            aRelbCodigo.setEditable(false);
            addField(aRelbCodigo, "view");
            aDataAprovado.setEditable(false);
            addField(aDataAprovado, "view");
            aRapvNomeApresentacao.setEditable(false);
            addField(aRapvNomeApresentacao, "view");
            aRapvCodigo.setEditable(false);
            addField(aRapvCodigo, "view");
            aDataDescontinuado.setEditable(false);
            addField(aDataDescontinuado, "view");
            aRdscNomeApresentacao.setEditable(false);
            addField(aRdscNomeApresentacao, "view");
            aRdscCodigo.setEditable(false);
            addField(aRdscCodigo, "view");
            aRdscNome.setEditable(false);
            addField(aRdscNome, "view");
            aRdscSobrenome.setEditable(false);
            addField(aRdscSobrenome, "view");
            aNroPontosMetadeFaixa.setOptional(false);
            addField(aNroPontosMetadeFaixa, "rqd");
        }
        
        {
            setFeatureName("UPDATE");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="DELETE">
    public class FDelete extends DeleteFeature {
        
        @Override
        public void initForm() {
            addField(aNome, "view");
            addField(aSituacao, "view");
            addField(aAplcNome, "view");
            addField(aDescricao, "view");
        }
        
        {
            setFeatureName("DELETE");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="APROVAR_PLANO">
    public class FAprovarPlano extends UpdateFeature {
        
        @Override
        public void initForm() {
            aNome.setEditable(false);
            addField(aNome, "view");
            aSituacao.setEditable(false);
            addField(aSituacao, "view");
            aAplcNome.setEditable(false);
            addField(aAplcNome, "view");
            aAplcVersaoAplicativo.setEditable(false);
            addField(aAplcVersaoAplicativo, "view");
            aPermiteClonar.setEditable(false);
            addField(aPermiteClonar, "view");
            aDescricao.setEditable(false);
            addField(aDescricao, "view");
            aRelbNomeApresentacao.setEditable(false);
            addField(aRelbNomeApresentacao, "view");
            aRelbCodigo.setEditable(false);
            addField(aRelbCodigo, "view");
            aDataAprovado.setEditable(false);
            aDataAprovado.setDefaultValue("[SYSDATE]");
            addField(aDataAprovado, "view");
            aRapvNomeApresentacao.setOptional(false);
            addField(aRapvNomeApresentacao, "rqd");
            aRapvCodigo.setEditable(false);
            addField(aRapvCodigo, "view");
            aDataDescontinuado.setEditable(false);
            addField(aDataDescontinuado, "view");
            aRdscNomeApresentacao.setEditable(false);
            addField(aRdscNomeApresentacao, "view");
            aRdscCodigo.setEditable(false);
            addField(aRdscCodigo, "view");
            aMotivoDescontinuarPlano.setEditable(false);
            addField(aMotivoDescontinuarPlano, "view");
        }
        
        @Override
        public void preDisplay() {
            try {
                atribuirSysdateDatasPlano();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        @Override
        public void preUpdate() {
            try {
                marcarAlteracaoDatasPlano();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("APROVAR_PLANO");
            setTitle("Aprovar plano");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="DESCONTINUAR_PLANO">
    public class FDescontinuarPlano extends UpdateFeature {
        
        @Override
        public void initForm() {
            aNome.setEditable(false);
            addField(aNome, "view");
            aSituacao.setEditable(false);
            addField(aSituacao, "view");
            aAplcNome.setEditable(false);
            addField(aAplcNome, "view");
            aAplcVersaoAplicativo.setEditable(false);
            addField(aAplcVersaoAplicativo, "view");
            aPermiteClonar.setEditable(false);
            addField(aPermiteClonar, "view");
            aDescricao.setEditable(false);
            addField(aDescricao, "view");
            aRelbNomeApresentacao.setEditable(false);
            addField(aRelbNomeApresentacao, "view");
            aRelbCodigo.setEditable(false);
            addField(aRelbCodigo, "view");
            aDataAprovado.setEditable(false);
            addField(aDataAprovado, "view");
            aRapvNomeApresentacao.setEditable(false);
            addField(aRapvNomeApresentacao, "view");
            aRapvCodigo.setEditable(false);
            addField(aRapvCodigo, "view");
            aDataDescontinuado.setEditable(false);
            aDataDescontinuado.setDefaultValue("[SYSDATE]");
            addField(aDataDescontinuado, "view");
            aRdscNomeApresentacao.setOptional(false);
            addField(aRdscNomeApresentacao, "rqd");
            aRdscCodigo.setEditable(false);
            addField(aRdscCodigo, "view");
            aRdscNome.setEditable(false);
            addField(aRdscNome, "view");
            aRdscSobrenome.setEditable(false);
            addField(aRdscSobrenome, "view");
            aMotivoDescontinuarPlano.setOptional(false);
            addField(aMotivoDescontinuarPlano, "rqd");
        }
        
        @Override
        public void preDisplay() {
            try {
                atribuirSysdateDatasPlano();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        @Override
        public void preUpdate() {
            try {
                marcarAlteracaoDatasPlano();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("DESCONTINUAR_PLANO");
            setTitle("Descontinuar plano");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="CLONAR_PLANO">
    public class FClonarPlano extends CustomActionFeature {
        
        @Override
        public void initForm() {
        }
        
        @Override
        public void execute() {
            try {
                clonarPlano();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("CLONAR_PLANO");
            setTitle("Clonar plano");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="APLC_NOME_LOOKUP">
    public class FAplcNomeLookup extends LookupFeature {
        
        @Override
        public void initForm() {
            aAplcNome.setEditable(true);
            addField(aAplcNome, "opt");
            aAplcVersaoAplicativo.setEditable(false);
            addField(aAplcVersaoAplicativo, "view");
        }
        
        @Override
        public ModelQuery getLookupQuery() {
            return createQuery()
                    .select("APLC.NOME as APLC_NOME")
                    .select("APLC.VERSAO_APLICATIVO as APLC_VERSAO_APLICATIVO")
                    .from("APLICATIVO_OPERACAO", "APLC")
                    ;
        }
        
        {
            setFeatureName("APLC_NOME_LOOKUP");
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="RAPV_NOME_APRESENTACAO_LOOKUP">
    public class FRapvNomeApresentacaoLookup extends LookupFeature {
        
        @Override
        public void initForm() {
            aRapvNomeApresentacao.setEditable(true);
            addField(aRapvNomeApresentacao, "opt");
            aRapvCodigo.setEditable(false);
            addField(aRapvCodigo, "view");
            aRapvNome.setEditable(false);
            addField(aRapvNome, "view");
            aRapvSobrenome.setEditable(false);
            addField(aRapvSobrenome, "view");
            aRapvUsuarioAssociadoId.setEditable(false);
            addField(aRapvUsuarioAssociadoId, "view");
        }
        
        @Override
        public ModelQuery getLookupQuery() {
            return createQuery()
                    .select("RAPV.NOME_APRESENTACAO as RAPV_NOME_APRESENTACAO")
                    .select("RAPV.CODIGO as RAPV_CODIGO")
                    .select("RAPV.NOME as RAPV_NOME")
                    .select("RAPV.SOBRENOME as RAPV_SOBRENOME")
                    .select("RAPV.USUARIO_ASSOCIADO_ID as RAPV_USUARIO_ASSOCIADO_ID")
                    .from("PESSOA", "RAPV")
                    .where("rapv.usuario_associado_id is not null and rapv.ativo = 'S'")
                    ;
        }
        
        {
            setFeatureName("RAPV_NOME_APRESENTACAO_LOOKUP");
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="RDSC_NOME_APRESENTACAO_LOOKUP">
    public class FRdscNomeApresentacaoLookup extends LookupFeature {
        
        @Override
        public void initForm() {
            aRdscNomeApresentacao.setEditable(true);
            addField(aRdscNomeApresentacao, "opt");
            aRdscCodigo.setEditable(false);
            addField(aRdscCodigo, "view");
            aRdscNome.setEditable(false);
            addField(aRdscNome, "view");
            aRdscSobrenome.setEditable(false);
            addField(aRdscSobrenome, "view");
            aRdscUsuarioAssociadoId.setEditable(false);
            addField(aRdscUsuarioAssociadoId, "view");
        }
        
        @Override
        public ModelQuery getLookupQuery() {
            return createQuery()
                    .select("RDSC.NOME_APRESENTACAO as RDSC_NOME_APRESENTACAO")
                    .select("RDSC.CODIGO as RDSC_CODIGO")
                    .select("RDSC.NOME as RDSC_NOME")
                    .select("RDSC.SOBRENOME as RDSC_SOBRENOME")
                    .select("RDSC.USUARIO_ASSOCIADO_ID as RDSC_USUARIO_ASSOCIADO_ID")
                    .from("PESSOA", "RDSC")
                    .where("rdsc.usuario_associado_id is not null and rdsc.ativo = 'S'")
                    ;
        }
        
        {
            setFeatureName("RDSC_NOME_APRESENTACAO_LOOKUP");
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="RELB_NOME_APRESENTACAO_LOOKUP">
    public class FRelbNomeApresentacaoLookup extends LookupFeature {
        
        @Override
        public void initForm() {
            aRelbNomeApresentacao.setEditable(true);
            addField(aRelbNomeApresentacao, "opt");
            aRelbCodigo.setEditable(false);
            addField(aRelbCodigo, "view");
            aRelbNome.setEditable(false);
            addField(aRelbNome, "view");
            aRelbSobrenome.setEditable(false);
            addField(aRelbSobrenome, "view");
            aRelbUsuarioAssociadoId.setEditable(false);
            addField(aRelbUsuarioAssociadoId, "view");
        }
        
        @Override
        public ModelQuery getLookupQuery() {
            return createQuery()
                    .select("RELB.NOME_APRESENTACAO as RELB_NOME_APRESENTACAO")
                    .select("RELB.CODIGO as RELB_CODIGO")
                    .select("RELB.NOME as RELB_NOME")
                    .select("RELB.SOBRENOME as RELB_SOBRENOME")
                    .select("RELB.USUARIO_ASSOCIADO_ID as RELB_USUARIO_ASSOCIADO_ID")
                    .from("PESSOA", "RELB")
                    .where("relb.usuario_associado_id is not null and relb.ativo = 'S'")
                    ;
        }
        
        {
            setFeatureName("RELB_NOME_APRESENTACAO_LOOKUP");
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FQuery());
        addFeature(new FList());
        addFeature(new FView());
        addFeature(new FInsert());
        addFeature(new FUpdate());
        addFeature(new FDelete());
        addFeature(new FAprovarPlano());
        addFeature(new FDescontinuarPlano());
        addFeature(new FClonarPlano());
        addFeature(new FAplcNomeLookup());
        addFeature(new FRapvNomeApresentacaoLookup());
        addFeature(new FRdscNomeApresentacaoLookup());
        addFeature(new FRelbNomeApresentacaoLookup());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "QUERY";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    
    public String getNome() {
        return aNome.getValue();
    }
    
    public void setNome(String value) {
        this.aNome.setValue(value);
    }
    
    public String getSituacao() {
        return aSituacao.getValue();
    }
    
    public void setSituacao(String value) {
        this.aSituacao.setValue(value);
    }
    
    public String getPermiteClonar() {
        return aPermiteClonar.getValue();
    }
    
    public void setPermiteClonar(String value) {
        this.aPermiteClonar.setValue(value);
    }
    
    public String getDescricao() {
        return aDescricao.getValue();
    }
    
    public void setDescricao(String value) {
        this.aDescricao.setValue(value);
    }
    
    public java.sql.Date getDataAprovado() {
        return aDataAprovado.getValue();
    }
    
    public void setDataAprovado(java.sql.Date value) {
        this.aDataAprovado.setValue(value);
    }
    
    public java.sql.Date getDataDescontinuado() {
        return aDataDescontinuado.getValue();
    }
    
    public void setDataDescontinuado(java.sql.Date value) {
        this.aDataDescontinuado.setValue(value);
    }
    
    public String getMotivoDescontinuarPlano() {
        return aMotivoDescontinuarPlano.getValue();
    }
    
    public void setMotivoDescontinuarPlano(String value) {
        this.aMotivoDescontinuarPlano.setValue(value);
    }
    
    public Integer getNroPontosMetadeFaixa() {
        return aNroPontosMetadeFaixa.getValue();
    }
    
    public void setNroPontosMetadeFaixa(Integer value) {
        this.aNroPontosMetadeFaixa.setValue(value);
    }
    
    @Override
    public Long getId() {
        return aId.getValue();
    }
    
    public void setId(Long value) {
        this.aId.setValue(value);
    }
    
    public Long getResponsavelDescontinuacaoId() {
        return aResponsavelDescontinuacaoId.getValue();
    }
    
    public void setResponsavelDescontinuacaoId(Long value) {
        this.aResponsavelDescontinuacaoId.setValue(value);
    }
    
    public Long getResponsavelAprovacaoId() {
        return aResponsavelAprovacaoId.getValue();
    }
    
    public void setResponsavelAprovacaoId(Long value) {
        this.aResponsavelAprovacaoId.setValue(value);
    }
    
    public Long getResponsavelElaboracaoId() {
        return aResponsavelElaboracaoId.getValue();
    }
    
    public void setResponsavelElaboracaoId(Long value) {
        this.aResponsavelElaboracaoId.setValue(value);
    }
    
    public Long getAplicativoOperacaoId() {
        return aAplicativoOperacaoId.getValue();
    }
    
    public void setAplicativoOperacaoId(Long value) {
        this.aAplicativoOperacaoId.setValue(value);
    }
    
    public String getAplcNome() {
        return aAplcNome.getValue();
    }
    
    public void setAplcNome(String value) {
        this.aAplcNome.setValue(value);
    }
    
    public Integer getAplcVersaoAplicativo() {
        return aAplcVersaoAplicativo.getValue();
    }
    
    public void setAplcVersaoAplicativo(Integer value) {
        this.aAplcVersaoAplicativo.setValue(value);
    }
    
    public String getRapvNomeApresentacao() {
        return aRapvNomeApresentacao.getValue();
    }
    
    public void setRapvNomeApresentacao(String value) {
        this.aRapvNomeApresentacao.setValue(value);
    }
    
    public String getRapvCodigo() {
        return aRapvCodigo.getValue();
    }
    
    public void setRapvCodigo(String value) {
        this.aRapvCodigo.setValue(value);
    }
    
    public String getRapvNome() {
        return aRapvNome.getValue();
    }
    
    public void setRapvNome(String value) {
        this.aRapvNome.setValue(value);
    }
    
    public String getRapvSobrenome() {
        return aRapvSobrenome.getValue();
    }
    
    public void setRapvSobrenome(String value) {
        this.aRapvSobrenome.setValue(value);
    }
    
    public Long getRapvUsuarioAssociadoId() {
        return aRapvUsuarioAssociadoId.getValue();
    }
    
    public void setRapvUsuarioAssociadoId(Long value) {
        this.aRapvUsuarioAssociadoId.setValue(value);
    }
    
    public String getRdscNomeApresentacao() {
        return aRdscNomeApresentacao.getValue();
    }
    
    public void setRdscNomeApresentacao(String value) {
        this.aRdscNomeApresentacao.setValue(value);
    }
    
    public String getRdscCodigo() {
        return aRdscCodigo.getValue();
    }
    
    public void setRdscCodigo(String value) {
        this.aRdscCodigo.setValue(value);
    }
    
    public String getRdscNome() {
        return aRdscNome.getValue();
    }
    
    public void setRdscNome(String value) {
        this.aRdscNome.setValue(value);
    }
    
    public String getRdscSobrenome() {
        return aRdscSobrenome.getValue();
    }
    
    public void setRdscSobrenome(String value) {
        this.aRdscSobrenome.setValue(value);
    }
    
    public Long getRdscUsuarioAssociadoId() {
        return aRdscUsuarioAssociadoId.getValue();
    }
    
    public void setRdscUsuarioAssociadoId(Long value) {
        this.aRdscUsuarioAssociadoId.setValue(value);
    }
    
    public String getRelbNomeApresentacao() {
        return aRelbNomeApresentacao.getValue();
    }
    
    public void setRelbNomeApresentacao(String value) {
        this.aRelbNomeApresentacao.setValue(value);
    }
    
    public String getRelbCodigo() {
        return aRelbCodigo.getValue();
    }
    
    public void setRelbCodigo(String value) {
        this.aRelbCodigo.setValue(value);
    }
    
    public String getRelbNome() {
        return aRelbNome.getValue();
    }
    
    public void setRelbNome(String value) {
        this.aRelbNome.setValue(value);
    }
    
    public String getRelbSobrenome() {
        return aRelbSobrenome.getValue();
    }
    
    public void setRelbSobrenome(String value) {
        this.aRelbSobrenome.setValue(value);
    }
    
    public Long getRelbUsuarioAssociadoId() {
        return aRelbUsuarioAssociadoId.getValue();
    }
    
    public void setRelbUsuarioAssociadoId(Long value) {
        this.aRelbUsuarioAssociadoId.setValue(value);
    }
    public String getQueryNome() {
        return qNome.getQueryValue();
    }
    
    public void setQueryNome(String value) {
        this.qNome.setQueryValue(value);
    }
    public String getQuerySituacao() {
        return qSituacao.getQueryValue();
    }
    
    public void setQuerySituacao(String value) {
        this.qSituacao.setQueryValue(value);
    }
    public String getQueryAplcNome() {
        return qAplcNome.getQueryValue();
    }
    
    public void setQueryAplcNome(String value) {
        this.qAplcNome.setQueryValue(value);
    }
    public String getQueryPermiteClonar() {
        return qPermiteClonar.getQueryValue();
    }
    
    public void setQueryPermiteClonar(String value) {
        this.qPermiteClonar.setQueryValue(value);
    }
    public String getQueryRelbCodigo() {
        return qRelbCodigo.getQueryValue();
    }
    
    public void setQueryRelbCodigo(String value) {
        this.qRelbCodigo.setQueryValue(value);
    }
    public String getQueryRelbNome() {
        return qRelbNome.getQueryValue();
    }
    
    public void setQueryRelbNome(String value) {
        this.qRelbNome.setQueryValue(value);
    }
    public String getQueryRelbSobrenome() {
        return qRelbSobrenome.getQueryValue();
    }
    
    public void setQueryRelbSobrenome(String value) {
        this.qRelbSobrenome.setQueryValue(value);
    }
    public String getQueryDataAprovado() {
        return qDataAprovado.getQueryValue();
    }
    
    public void setQueryDataAprovado(String value) {
        this.qDataAprovado.setQueryValue(value);
    }
    public String getQueryRapvCodigo() {
        return qRapvCodigo.getQueryValue();
    }
    
    public void setQueryRapvCodigo(String value) {
        this.qRapvCodigo.setQueryValue(value);
    }
    public String getQueryRapvNome() {
        return qRapvNome.getQueryValue();
    }
    
    public void setQueryRapvNome(String value) {
        this.qRapvNome.setQueryValue(value);
    }
    public String getQueryRapvSobrenome() {
        return qRapvSobrenome.getQueryValue();
    }
    
    public void setQueryRapvSobrenome(String value) {
        this.qRapvSobrenome.setQueryValue(value);
    }
    public String getQueryDataDescontinuado() {
        return qDataDescontinuado.getQueryValue();
    }
    
    public void setQueryDataDescontinuado(String value) {
        this.qDataDescontinuado.setQueryValue(value);
    }
    public String getQueryRdscCodigo() {
        return qRdscCodigo.getQueryValue();
    }
    
    public void setQueryRdscCodigo(String value) {
        this.qRdscCodigo.setQueryValue(value);
    }
    public String getQueryRdscNome() {
        return qRdscNome.getQueryValue();
    }
    
    public void setQueryRdscNome(String value) {
        this.qRdscNome.setQueryValue(value);
    }
    public String getQueryRdscSobrenome() {
        return qRdscSobrenome.getQueryValue();
    }
    
    public void setQueryRdscSobrenome(String value) {
        this.qRdscSobrenome.setQueryValue(value);
    }
    // </editor-fold>
    
    /**
     * Clonar plano.
     */
    public void clonarPlano() throws AdsException {
        // <user-code id="20674663" parentId="20674610" hashcode="-4ee96ca7" length="505">
        ctx.readFields(aId);
        
        EntPlanoExecucao plano = null;
        try {
            ctx.beginTransaction();
            
            plano = new EntPlanoExecucao(ctx);
            plano.find(aId.getValue());
            plano.clonarPlanoExecucao();
        } catch (Exception e) {
            throw new AdsException(e);
        } finally {
            plano.close();
        }
        
        try {
            if (ctx.hasErrors()) {
                ctx.abortTransaction();
            } else {
                ctx.endTransaction();
            }
        } catch (Exception e) {
            throw new AdsException(e);
        }
        getFeature("VIEW").run();
        // </user-code>
    }
    
    /**
     * Atribuir sysdate para aprovar (ou descontinuar) o plano de execução.
     */
    private void atribuirSysdateDatasPlano() throws AdsException {
        // <user-code id="21757733" parentId="21757503" hashcode="-ff53d91" length="255">
        if (zAction.contains("APROVAR_PLANO")) {
            aDataDescontinuado.nullify();
            aDataAprovado.setValue("[SYSDATE]");
        } else if (zAction.contains("DESCONTINUAR_PLANO")) {
            aDataAprovado.nullify();
            aDataDescontinuado.setValue("[SYSDATE]");    
        }
        // </user-code>
    }
    
    /**
     * Desabilitar ações da interface.
     */
    private void desabilitarAcoesInterface() throws AdsException {
        // <user-code id="20835458" parentId="20835432" hashcode="-dc66e28" length="753">
        /*
        // import br.com.telescope.t2.exception.Severity;
        
        String situacaoInstrucao = getRecord().findInstrucaoTrabalho().valueOfSituacao();
        if (!situacaoInstrucao.equals("A")) {
            getForm().delAction("APROVAR_PLANO");
            getForm().delAction("CLONAR_PLANO");
            //getForm().delAction("DESCONTINUAR_PLANO");
            
            ctx.pushError(GLOBAL_NAME,
                    Severity.WARNING,
                    "A situação atual da instrução de trabalho não permite que este plano de ensaio possa ser aprovado!");
        } else 
        */
        if (getRecord().valueOfSituacao().equals("A")) {
            getForm().delAction("APROVAR_PLANO");
        } else if (getRecord().valueOfSituacao().equals("D")) {
            getForm().delAction("DESCONTINUAR_PLANO");
            getForm().delAction("CLONAR_PLANO");
        }
        // </user-code>
    }
    
    /**
     * Marcar alteração de datas do plano de execução.
     */
    private void marcarAlteracaoDatasPlano() throws AdsException {
        // <user-code id="21757665" parentId="21757513" hashcode="-76ec1a1d" length="340">
        if (zAction.contains("APROVAR_PLANO")) {
            getRecord().setDataAprovado(aDataAprovado.getValue());
            getRecord().getDataAprovado().setModified(true);
        } else if (zAction.contains("DESCONTINUAR_PLANO")) {
            getRecord().setDataDescontinuado(aDataDescontinuado.getValue());
            getRecord().getDataDescontinuado().setModified(true);
        }
        // </user-code>
    }
    
    @Override
    public String getJsServiceFile() {
        return "ui/ztest/cad_plano_execucao.js";
    }
}
